/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controladores;

import java.util.List;
import util.Util;
import produto.CadastroProduto;
import produto.Produto;
import produto.ProdutoJaCadastradoException;
import produto.ProdutoNaoCadastradoException;
import produto.RepositorioProduto;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
 *
 * @author Alberto
 */
public class ControladorProduto {

    private RepositorioProduto objRepositorioProduto;

    public ControladorProduto(RepositorioProduto objRepositorioProduto) {
        this.objRepositorioProduto = objRepositorioProduto;
    }

     /**
     * Metodo que ira cadastrar o Produto
     *
     * @param Produto objProduto
     * @return void
     */
    public void cadastrar(Produto objProduto) throws ProdutoJaCadastradoException, CamposObrigatoriosException, ErroAcessoRepositorioException {
        CadastroProduto objCadastroProduto = new CadastroProduto(this.objRepositorioProduto);
        
        if(Util.verificaData(objProduto.getDataEntrada().toString()))
            throw new CamposObrigatoriosException("Data entrada");

        if(objProduto.getDescricaoProduto().getIdDescricaoProduto() == 0)
            throw new CamposObrigatoriosException("Produto");

        if(objProduto.getFornecedor().getIdFornecedor() == 0)
            throw new CamposObrigatoriosException("Fornecedor");
        
        if(objProduto.getStatusProduto() == null)
            throw new CamposObrigatoriosException("Status");
        
        objCadastroProduto.cadastrarAtualizar(objProduto);
    }

    /**
     * Metodo que ira atualizar o Produto
     *
     * @param Produto objProduto
     * @return void
     */
    public void atualizar(Produto objProduto) throws ProdutoNaoCadastradoException, ProdutoJaCadastradoException,  CamposObrigatoriosException, ErroAcessoRepositorioException {
        // Iniciando meus cadastros
        CadastroProduto objCadastroProduto = new CadastroProduto(this.objRepositorioProduto);
        
        if(!this.objRepositorioProduto.existe(objProduto.getIdProduto()))
            throw new ProdutoNaoCadastradoException("Produto Não Cadastrado");

        if(Util.verificaData(objProduto.getDataEntrada().toString()))
            throw new CamposObrigatoriosException("Data entrada");

        if(objProduto.getNotaProduto().trim().length() == 0)
            throw new CamposObrigatoriosException("Numero Nota");

        if(objProduto.getDescricaoProduto().getIdDescricaoProduto() == 0)
            throw new CamposObrigatoriosException("Produto inexistente");

        if(objProduto.getFornecedor().getIdFornecedor() == 0)
            throw new CamposObrigatoriosException("Fornecedor inexistente");


        if(objProduto.getStatusProduto().getIdStatusProdutos() == 0)
            throw new CamposObrigatoriosException("Status inexistente");
        
        objCadastroProduto.cadastrarAtualizar(objProduto);
    }

    /**
     * Metodo que ira produrar o Produto
     *
     * @param int idProduto
     * @return Produto
     */
    public Produto procurar(int idProduto) throws ProdutoNaoCadastradoException, ErroAcessoRepositorioException {
        CadastroProduto objCadastroProduto = new CadastroProduto(this.objRepositorioProduto);

        return objCadastroProduto.procurar(idProduto);
    }

    /**
     * Metodo que ira verificar a existência do Produto
     *
     * @param int idProduto
     * @return void
     */
    public boolean existe(int idProduto) throws  ErroAcessoRepositorioException {
        CadastroProduto objCadastroProduto = new CadastroProduto(this.objRepositorioProduto);

        return objCadastroProduto.existe(idProduto);
    }

    /**
     * Metodo que ira listar os Produtos
     *
     * @return Collection
     */
    public List<Produto> listar(String strComplemento) throws Exception, ErroAcessoRepositorioException {
        CadastroProduto objCadastroProduto = new CadastroProduto(this.objRepositorioProduto);

        return objCadastroProduto.listar(strComplemento);
    }

    /**
     * Método que ira remover o produto do banco
     *
     * @param idProduto
     */
    public void remover(int idProduto) throws ProdutoNaoCadastradoException, ErroAcessoRepositorioException {

        CadastroProduto objCadastroProduto = new CadastroProduto(this.objRepositorioProduto);

        objCadastroProduto.remover(idProduto);
    }

    /**
     * Método que verifica se já existe um produto com a nota informada
     *
     * @param numeroNota
     * @return boolean
     */
    public boolean existePorNumeroNota(String numeroNota) throws ErroAcessoRepositorioException {
        
        CadastroProduto objCadastroProduto = new CadastroProduto(this.objRepositorioProduto);

        return objCadastroProduto.existePorNumeroNota(numeroNota);
    }
}
